package com.personal.gateway.custom.customEnum.flinkCommandEnum;

import com.personal.gateway.flinkAllCommand.configurationOption.ConfigurationOption;
import com.personal.gateway.flinkAllCommand.configurationOption.configurationType.ConfigurationTypeEnumInterface;

import javax.annotation.Nonnull;

/**
 * @author BigHead
 * @date 2022/1/20 16:59
 * @description FlinkFileSystemEnum
 */
public enum FlinkFileSystemEnum implements ConfigurationTypeEnumInterface {
    /**
     * 默认文件系统
     * 所有 Flink 无法找到直接支持的文件系统均将回退为 Hadoop。 当 flink-runtime 和 Hadoop 类包含在 classpath 中时，所有的 Hadoop 文件系统将自动可用
     */
    DEFAULT("default"),
    /**
     * 亚马逊amazon s3
     */
    AMAZON_S3("Amazon_S3"),
    /**
     * MAPR 文件系统
     */
    MAPR_FS("MapR_FS"),
    /**
     * 阿里云 oss存储
     */
    ALIYUN_OSS("ALiyun_Oss"),
    /**
     * Azure Blob 存储是 Microsoft 提供的适用于云的对象存储解决方案
     */
    AZURE_BLOB_STORAGE("Azure_Blob_Storage"),
    /**
     * 谷歌云存储
     */
    GOOGLE_CLOUD_STORAGE("Google_Cloud_Storage");


    public final static Class<Enum<? extends ConfigurationTypeEnumInterface>> FILE_SYSTEM_ENUM_TYPE_CLASS = (Class<Enum<? extends ConfigurationTypeEnumInterface>>) (Class<?>) FlinkFileSystemEnum.class;

    private final String fileSystemName;

    FlinkFileSystemEnum(String fileSystemName) {
        this.fileSystemName = fileSystemName;
    }

    @Override
    public String getShowValue() {
        return name();
    }

    @Override
    public String getSelectValue() {
        return fileSystemName;
    }

    @Override
    public boolean checkExist(@Nonnull String... values) {
        if (values.length == 1) {
            return fileSystemName.equals(values[0]);
        }
        return false;
    }

    @Override
    public boolean checkExist(ConfigurationOption<?, ?> configurationOption, @Nonnull String... values) {
        return false;
    }

    @Override
    public boolean checkExampleValue(ConfigurationOption<?, ?> configurationOption) {
        return false;
    }
}
